/* 
token处理的工具函数
1. 生成token
2. 校验token
*/
const jwt = require('jsonwebtoken')

const SECRET_KEY = 'wh220516_key'

/**
 * 生成并返回token
 * @param {*} userId }userId 用户id 
 * @param {*} expireTime  expiresIn 过期时间, 可以数值, 单位秒, 也可以是字符串
 */

function createToken(userId, expireTime='7d') {
  // 参数: 数据对象 密钥 过期时间配置
  return jwt.sign({data: userId}, SECRET_KEY, {expiresIn: expireTime})
}

exports.createToken = createToken

/**
 * 校验token
 * @param {*} token 
 * @returns promise对象,校验失败 promise失败,  校验成功, promise成功, 且value为userId
 */
function verifyToken(token) {
  return new Promise((resolve, reject) => {
    // 对token进行校验   参数分别为: token / 密钥 / 回调函数
    jwt.verify(token, SECRET_KEY, (err, decode) => {
      // 校验失败, 变为失败的promise
      if (err) {
        console.log(err);
        reject(new Error('token过期或非法'))
      } else {
        // 校验成功, 变为成功的promise
        resolve(decode.data)
      }
    })
  })
}
exports.verifyToken = verifyToken


/* const token = createToken(123, 3)
console.log(token)
setTimeout(() => {
  verifyToken(token)
  .then(
    value => {
      console.log(value)
    },
    error => {
      console.log(error.message)
    }
  )
}, 4000); */
